package com.baizhi.cmfz.controller;

import com.baizhi.cmfz.entity.Banner;
import com.baizhi.cmfz.service.BannerService;
import org.apache.shiro.authz.annotation.RequiresPermissions;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;

import javax.servlet.http.HttpServletRequest;
import java.io.File;
import java.io.IOException;
import java.util.Map;
import java.util.UUID;

/**
 * 与页面交互 做流程跳转 传递数据到页面
 */
@RestController
@RequestMapping("banner")
public class BannerController {
    @Autowired
    private BannerService bannerService;
    @RequestMapping("selectBanner")
    public Map selectBanner(int page,int limit) {
        return bannerService.selectBanner(page,limit);
    }

    @RequestMapping("addBanner")
    @RequiresPermissions({"banner:create"})//有创建权限才能进行创建操作，否则会报异常说没有权限
    public Map addBanner(Banner banner , MultipartFile bannerImg, HttpServletRequest request) throws IOException {
        //获取到图片上传的文件夹的真实路径
        String realPath = request.getServletContext().getRealPath("img");
        //为了防止文件名字的重复，上传文件时添加UUID
        String fileName = UUID.randomUUID()+bannerImg.getOriginalFilename();

        //String fileName = bannerImg.getOriginalFilename();
        //将文件上传到文件获取到的文件夹
        bannerImg.transferTo(new File(realPath+"/"+fileName));
        banner.setBannerImageUrl("/img/"+fileName);
        Map map = bannerService.addBanner(banner);
        return map;
    }

    /**
     * 点击删除时需要请求后台删除数据
     * 接收页面传递来的数据
     * @param bannerId
     * @return
     */
    @RequestMapping("deleteBanner")
    @RequiresRoles("superadmin")//注解式的授权 表示这个角色才有权限执行这个方法，没有权限执行的方法会报异常
    public Map deleteBanner(int bannerId) {
        Map map = bannerService.deleteBanner(bannerId);
        return map;
    }

    /**
     * 点击修改之前先获取到当前行的全部数据
     * @param bannerId
     * @return
     */
    @RequestMapping("selectOne")
    public Banner selectOne(int bannerId) {
        Banner banner = bannerService.selectOne(bannerId);
        return banner;
    }

    /**
     * 修改时，会存在图片文件是否修改
     * 当文件没有修改时，获取到的文件名是一个控字符串，
     * 这时数据库也不进行修改
     * 当文件修改时，进行文件上传 后台数据跟着改变
     * @param banner
     * @param bannerImg
     * @param request
     * @return
     */
    @RequestMapping("updateBanner")
    public Map updateBanner(Banner banner,MultipartFile bannerImg,HttpServletRequest request) throws IOException {
        System.out.println("修改时收参"+banner);
        /*System.out.println(bannerImg);
        System.out.println((bannerImg.getOriginalFilename()).equals(""));*/
        //判断文件是不是修改
        if (!(bannerImg.getOriginalFilename()).equals("")) {
            //当文件修改时 进行对应的文件上传
            String realPath = request.getServletContext().getRealPath("img");

            String fileName = UUID.randomUUID()+"-"+bannerImg.getOriginalFilename();

            bannerImg.transferTo(new File(realPath+"/"+fileName));

            banner.setBannerImageUrl("/img/"+fileName);

        }else {
            banner.setBannerImageUrl(null);
        }
        Map map = bannerService.updateBanner(banner);
        return map;
    }
}
